﻿//========================================================= 
/**@file lmdb_protobuf_converter.h
 * @brief MDB_val到google::protobuf::Message的相互转换
 * 
 * @date 2018-07-23   16:18:29
 * @author Zhyioo 
 * @version 1.0
 */ 
//--------------------------------------------------------- 
#ifndef _LIBZHOUYB_LMDB_PROTOBUF_CONVERTER_H_
#define _LIBZHOUYB_LMDB_PROTOBUF_CONVERTER_H_
//--------------------------------------------------------- 
#include <lmdb.h>
#include <google/protobuf/message.h>
//--------------------------------------------------------- 
namespace zhou_yb {
namespace wrapper {
namespace protobuf_extractor {
//--------------------------------------------------------- 
template<class TMessage>
class lmdb_protobuf_converter
{
protected:
    std::string _buff;
public:
    typedef TMessage value_type;

    void From(const MDB_val& mdbV, value_type& data)
    {
        data.ParseFromArray(mdbV.mv_data, mdbV.mv_size);
    }
    void To(const value_type& data, MDB_val& mdbV)
    {
        _buff = data.SerializePartialAsString();
        mdbV.mv_data = const_cast<char*>(_buff.c_str());
        mdbV.mv_size = _buff.length();
    }
};
//--------------------------------------------------------- 
} // namespace protobuf_extractor
} // namespace wrapper
} // namespace zhou_yb
//--------------------------------------------------------- 
#endif // _LIBZHOUYB_LMDB_PROTOBUF_CONVERTER_H_
//========================================================= 